home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #1 / Amiga Plus 1999 #1.iso / System-Boost / Workbench / BackClock / sources / obp.c < prev    next >
C/C++ Source or Header  |  1998-08-10  |  2KB  |  68 lines

  1. /*****************************************************************************
  2.  * 
  3.  * name                    : obp.c
  4.  * description            : pens handling
  5.  * version                : 1.1
  6.  *
  7.  * created                : 13-03-98
  8.  * last change            : 11-04-98
  9.  *
  10.  *****************************************************************************
  11.  */
  12. #include <intuition/intuition.h>
  13. #include <intuition/screens.h>
  14. #include <graphics/view.h> 
  15.  
  16. #include <proto/intuition.h>
  17. #include <proto/graphics.h>
  18. #include <proto/exec.h>
  19.  
  20. #include "obp.h"
  21. #include "utils.h"
  22.  
  23. void setColors(idWin * prj) {
  24.   int i ;
  25.   prj->wb = LockPubScreen("Workbench") ;
  26.   for(i=0; i<NUM_COLORS; i++)
  27.     freePen(prj, prj->backWin.cmap[i].reg) ;
  28.   
  29.   initColors(prj) ;
  30.   initwin(prj) ;
  31.   if (prj->wb) UnlockPubScreen(NULL, prj->wb) ;
  32.   prj->lastError = OK ;
  33. }
  34.  
  35. void initColors(idWin * prj) {
  36.   int i ;
  37.   prj->wb = LockPubScreen("Workbench") ;
  38.   for(i=0; i<NUM_COLORS; i++) {
  39.     prj->backWin.cmap[i].reg = getPen(prj, prj->backWin.cmap[i].R,
  40.                                            prj->backWin.cmap[i].G,
  41.                                            prj->backWin.cmap[i].B) ;
  42.   }
  43.   if (prj->wb) UnlockPubScreen(NULL, prj->wb) ;
  44.   prj->lastError = OK ;
  45. }
  46.  
  47. ULONG getPen(idWin * prj, UBYTE R, UBYTE G, UBYTE B) {
  48.   LONG color ;
  49.   struct Screen   * wbscr ;
  50.   struct ColorMap * wbcm ;
  51.   
  52.   if (wbscr = prj->wb) {
  53.     wbcm = wbscr->ViewPort.ColorMap ;
  54.     if ((color = ObtainBestPen(wbcm, ((LONG)R<<24)|0xffffff, ((LONG)G<<24)|0xffffff, ((LONG)B<<24)|0xffffff, TAG_DONE)) >=0 ) {
  55.        prj->lastError = OK ;
  56.       
  57.     }else prj->lastError = ERRORNOMEM;  
  58.   }
  59.   return((ULONG)color) ;
  60. }
  61. void freePen(idWin * prj, ULONG reg) {
  62.   struct Screen   * wbscr ;
  63.   struct ColorMap * wbcm ;
  64.   if (wbscr = prj->wb) {
  65.     wbcm = wbscr->ViewPort.ColorMap ;
  66.     ReleasePen(wbcm, (LONG)reg) ;
  67.   }
  68. }